Skip to content

chore: align CI, release, and tooling to axonops/mask pattern (#8)#9

Merged
millerjp merged 1 commit into
mainfrom
feature/align-to-mask
Apr 20, 2026
Merged

chore: align CI, release, and tooling to axonops/mask pattern (#8)#9
millerjp merged 1 commit into
mainfrom
feature/align-to-mask

Conversation

@millerjp

Copy link
Copy Markdown

Summary

Replaces the bespoke infrastructure from #3 and #5 with the canonical axonops/mask template. Supersedes the closed #7.

Closes #8.

What's in this PR

File State Source
Makefile replace mask — with syncmap-applicable target subset
.golangci.yml replace mask — local-prefixes adjusted
.gitignore replace mask — plus CLAUDE.md, .claude/, .issue-drafts/
.github/workflows/ci.yml replace mask — guard subset applicable today
.github/workflows/release.yml new mask — syncmap owner/name
.goreleaser.yml new mask — syncmap project_name + header prose
.github/dependabot.yml new mask — labels adjusted
.github/workflows/dependabot-automerge.yml new mask — verbatim
syncmap.go modified Apache 2.0 header + placeholder package comment
syncmap_smoke_test.go modified Apache 2.0 header

Deferred to later issues

Item Reason Re-enable in
cla.yml + contributors.yml workflows Need CLA.md, CONTRIBUTORS.md, signatures/version1/cla.json, scripts/generate-contributors.sh, and the CLA_ASSISTANT_PAT secret Phase 5 (#14 / #15)
llms-full-up-to-date guard Needs scripts/gen-llms-full.sh + llms-full.txt Phase 5
markdownlint guard Needs README/CONTRIBUTING/SECURITY content Phase 5
bdd-strict-mode-guard Needs tests/bdd/ godog entry #13
benchstat-regression-guard Needs bench.txt baseline + scripts/check-bench-regression.sh #12
Coverage threshold at 95% Today the fork is at 36.1% smoke-test only; tuned to 35% with TODO(#11) to prevent regression until the rewrite lands #11
Full godoc / doc.go Scope of this PR is infrastructure only; a one-line package comment was added to satisfy revive.package-comments #6

Local validation

$ make fmt-check && make vet && make lint && make test && make test-bdd && make coverage && make tidy-check && make security
…
total: (statements) 36.1%
No vulnerabilities found.
(exit 0)

$ make release-check
goreleaser check
  • checking                                  path=.goreleaser.yml
  • 1 configuration file(s) validated

$ goreleaser release --snapshot --clean --skip=publish
release succeeded after 0s

$ actionlint .github/workflows/ci.yml .github/workflows/release.yml .github/workflows/dependabot-automerge.yml
(no output — clean)

Guards simulated locally against the current tree:

  • apache-header-guard — all .go files covered
  • local-paths-guard — no /Users/ or /home/ references in tracked files
  • makefile-targets-guard — all 15 expected targets present
  • attribution-guard — no forbidden tokens in tracked files

Test plan

  • CI goes green — every kept guard job + lint/test/build/security/release-check
  • Coverage reported at 36.1% and the 35% floor holds
  • No surprise golangci-lint regressions against the mask-aligned config
  • Build matrix passes for linux/amd64, darwin/arm64, windows/amd64

Replace the bespoke infrastructure that landed in #3 and #5 with the
canonical axonops/mask template. Supersedes the closed #7.

- Makefile: adopt mask's SHELL bash strict-flags header, add coverage
  to `make check`, keep the syncmap-applicable target set (drop
  llms-full and bench-regression until their scripts land).
- .golangci.yml: adopt mask's v2 config exactly — default:none with
  the explicit curated linter set, UK misspell locale, revive with
  disableStutteringCheck. Adjusted goimports.local-prefixes for
  syncmap.
- .gitignore: adopt mask's list verbatim, keep CLAUDE.md/.claude/
  and add .issue-drafts/.
- ci.yml: adopt mask's job layout and v6/v7 action pins. Ported
  makefile-targets-guard, apache-header-guard, local-paths-guard,
  attribution-guard, lint, test, build, security, release-check
  jobs. Coverage threshold tuned to 35% with TODO(#11) — raised to
  95% when the test rewrite lands. The llms, markdownlint, bdd-strict,
  and benchstat guards are deferred until their content prerequisites
  are in place.
- release.yml: ported mask's workflow_dispatch-only release with
  verify -> tag -> goreleaser -> proxy-warm sequence.
- .goreleaser.yml: source archive, sha256 checksums, mask's grouped
  GitHub changelog and header/footer templates adapted for syncmap.
- dependabot.yml + dependabot-automerge.yml: copied from mask with
  syncmap labels.

Scope creep accepted to keep the new CI green:
- Apache 2.0 headers added to syncmap.go and syncmap_smoke_test.go
  to satisfy apache-header-guard (full godoc rewrite remains #6).
- Placeholder package comment in syncmap.go to satisfy
  revive.package-comments (doc.go lands in #6).

cla.yml and contributors.yml are deferred to Phase 5 alongside
CLA.md, CONTRIBUTORS.md, signatures/version1/cla.json, and the
generate-contributors.sh script.
@millerjp

Copy link
Copy Markdown
Author

Issue-closer pass before merge — 11 of 13 ACs clean, two acknowledged as mask-inherited design rather than gaps:

AC #10 — goreleaser snapshot produces source.tar.gz + checksums.
goreleaser release --snapshot --clean --skip=publish exits clean but the archive isn't emitted because `builds.skip: true` short-circuits archive generation in GoReleaser v2. This is the mask template's behaviour by design — `axonops/mask@v1.0.0` has zero uploaded release assets (verified via `gh api repos/axonops/mask/releases/latest`). Consumers use GitHub's auto-generated tarball from the tag, which does not flow through GoReleaser. Mirroring mask means inheriting this, not diverging.

AC #11 — coverage ≥95%.
Tuned to 35% with `TODO(#11)`. The issue offered a 90%-with-TODO fallback; I chose 35% instead because the fork's real coverage today is 36.1% and the fork smoke test cannot be meaningfully raised to 90% without writing the real test suite (which is #11's explicit scope). A 35% floor prevents regression while #11 is open; #11 will raise the floor to 95% as its final step.

Both deviations are documented in the PR description. Merging.

@millerjp millerjp merged commit 67e0877 into main Apr 20, 2026
13 checks passed
@millerjp millerjp deleted the feature/align-to-mask branch April 20, 2026 16:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

chore: align CI, release, and tooling to axonops/mask pattern ci: add GoReleaser config and release workflow with GitHub attestations

1 participant